uboot: add non-default deployments to uEnv.txt
authorGuy Shapiro <guy.shapiro@mobi-wize.com>
Tue, 5 Sep 2017 12:59:35 +0000 (15:59 +0300)
committerAtomic Bot <atomic-devel@projectatomic.io>
Fri, 8 Sep 2017 00:58:08 +0000 (00:58 +0000)
Include non-default deployments in the uEnv.txt file imported by
U-Boot. All the configurations beside the defaults will have
numerical suffix E.G. "kernel_image2" or "bootargs2".
Those U-Boot environment variables may be used from interactive boot
prompt or from "altbootcmd" script.

Closes: #1138
Approved by: cgwalters

src/libostree/ostree-bootloader-uboot.c
tests/test-admin-deploy-uboot.sh

index 2fe0f8b65855ea8e3d07247e40d3d6115c5c7dc3..ce5d516c03b36f61fd266ba3f0433e1b601818de 100644 (file)
@@ -115,28 +115,36 @@ create_config_from_boot_loader_entries (OstreeBootloaderUboot     *self,
                                                  cancellable, error))
     return FALSE;
 
-  /* U-Boot doesn't support a menu so just pick the first one since the list is ordered */
-  config = boot_loader_configs->pdata[0];
-
-  val = ostree_bootconfig_parser_get (config, "linux");
-  if (!val)
+  for (int i = 0; i < boot_loader_configs->len; i++)
     {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                   "No \"linux\" key in bootloader config");
-      return FALSE;
-    }
-  g_ptr_array_add (new_lines, g_strdup_printf ("kernel_image=%s", val));
+      g_autofree char *index_suffix = NULL;
+      if (i == 0)
+        index_suffix = g_strdup ("");
+      else
+        index_suffix = g_strdup_printf ("%d", i+1);
+      config = boot_loader_configs->pdata[i];
+
+      val = ostree_bootconfig_parser_get (config, "linux");
+      if (!val)
+        {
+          g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                       "No \"linux\" key in bootloader config");
+          return FALSE;
+        }
+      g_ptr_array_add (new_lines, g_strdup_printf ("kernel_image%s=%s", index_suffix, val));
 
-  val = ostree_bootconfig_parser_get (config, "initrd");
-  if (val)
-    g_ptr_array_add (new_lines, g_strdup_printf ("ramdisk_image=%s", val));
+      val = ostree_bootconfig_parser_get (config, "initrd");
+      if (val)
+        g_ptr_array_add (new_lines, g_strdup_printf ("ramdisk_image%s=%s", index_suffix, val));
 
-  val = ostree_bootconfig_parser_get (config, "options");
-  if (val)
-    {
-      g_ptr_array_add (new_lines, g_strdup_printf ("bootargs=%s", val));
-      if (!append_system_uenv (self, val, new_lines, cancellable, error))
-        return FALSE;
+      val = ostree_bootconfig_parser_get (config, "options");
+      if (val)
+        {
+          g_ptr_array_add (new_lines, g_strdup_printf ("bootargs%s=%s", index_suffix, val));
+          if (i == 0)
+            if (!append_system_uenv (self, val, new_lines, cancellable, error))
+              return FALSE;
+        }
     }
 
   return TRUE;
index f04af4ab1e78410c37f1bee73bab76fc0a04937f..7791360e04c5363381a096ec38d41e26cc693b82 100755 (executable)
@@ -42,5 +42,7 @@ ${CMD_PREFIX} ostree --repo=testos-repo commit --tree=dir=osdata/ -b testos/buil
 ${CMD_PREFIX} ostree admin upgrade --os=testos
 assert_file_has_content sysroot/boot/uEnv.txt "loadfdt="
 assert_file_has_content sysroot/boot/uEnv.txt "kernel_image="
+assert_file_has_content sysroot/boot/uEnv.txt "kernel_image2="
+assert_file_has_content sysroot/boot/uEnv.txt "kernel_image3="
 
 echo "ok merging uEnv.txt files"